package com.hifar.test.structure.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hifar.plat.officUtil.ExcelTemplateUtil;
import com.hifar.test.structure.pojo.HfEnvResPersonTrainCheck;
import com.hifar.test.structure.pojo.HfEnvResPersonTrainRecord;
import com.hifar.test.structure.pojo.VO.*;
import com.hifar.test.structure.service.IHfEnvResPersonTrainCheckService;
import com.hifar.test.structure.service.IHfEnvResPersonTrainRecordService;
import com.hifar.test.structure.mapper.HfEnvResPersonTrainRecordMapper;
import com.hifar.sys.BusiResponse;
import com.hifar.sys.RequestConver;
import com.hifar.utils.ExcelImportUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.*;
import java.util.stream.Collectors;

/**
 *
 */
@Service
public class HfEnvResPersonTrainRecordServiceImpl extends ServiceImpl<HfEnvResPersonTrainRecordMapper, HfEnvResPersonTrainRecord>
        implements IHfEnvResPersonTrainRecordService {

    @Autowired
    private IHfEnvResPersonTrainCheckService envResPersonTrainCheckService;

    @Override
    public void add(HfEnvResPersonTrainRecordSaveVO envResPersonTrainRecordSaveVO) {
        HfEnvResPersonTrainRecord hfEnvResPersonTrainRecord = new HfEnvResPersonTrainRecord();
        BeanUtils.copyProperties(envResPersonTrainRecordSaveVO, hfEnvResPersonTrainRecord);
        this.save(hfEnvResPersonTrainRecord);
        String id = hfEnvResPersonTrainRecord.getId();
        List<HfEnvResPersonTrainCheck> trainCheckList = Optional.ofNullable(envResPersonTrainRecordSaveVO.getTrainCheckList())
                .orElse(new ArrayList<>(0));
        for (int i = 0; i < trainCheckList.size(); i++) {
            HfEnvResPersonTrainCheck hfEnvResPersonTrainCheck = trainCheckList.get(i);
            hfEnvResPersonTrainCheck.setId(null);
            hfEnvResPersonTrainCheck.setRowSort(i);
            hfEnvResPersonTrainCheck.setTrainRecordId(id);
        }
        envResPersonTrainCheckService.saveBatch(trainCheckList);

    }

    @Override
    public void edit(HfEnvResPersonTrainRecordSaveVO envResPersonTrainRecordSaveVO) {
        HfEnvResPersonTrainRecord hfEnvResPersonTrainRecord = new HfEnvResPersonTrainRecord();
        BeanUtils.copyProperties(envResPersonTrainRecordSaveVO, hfEnvResPersonTrainRecord);
        this.updateById(hfEnvResPersonTrainRecord);
        List<HfEnvResPersonTrainCheck> trainCheckList = Optional.ofNullable(envResPersonTrainRecordSaveVO.getTrainCheckList())
                .orElse(new ArrayList<>(0));
        String id = hfEnvResPersonTrainRecord.getId();
        for (int i = 0; i < trainCheckList.size(); i++) {
            HfEnvResPersonTrainCheck hfEnvResPersonTrainCheck = trainCheckList.get(i);
            hfEnvResPersonTrainCheck.setId(null);
            hfEnvResPersonTrainCheck.setRowSort(i);
            hfEnvResPersonTrainCheck.setTrainRecordId(id);
        }
        envResPersonTrainCheckService.removeByRecordId(id);
        envResPersonTrainCheckService.saveBatch(trainCheckList);
    }

    @Override
    public BusiResponse exportExcel(Map<String, Object> pageInfo) {
        BusiResponse busiResponse = new BusiResponse();
        String ids = (String) pageInfo.get("ids");
        String operationType = (String) pageInfo.get("operationType");
        if (StringUtils.isNotBlank(operationType) && (operationType.equals("template"))) {
            ExcelTemplateUtil.exportExcelTemplate(busiResponse, HfEnvResPersonTrainRecordExportVO.class, "导入模板", "培训记录导入数据");
            return busiResponse;
        } else {
            QueryWrapper<HfEnvResPersonTrainRecord> postParam = RequestConver.getPostParam(pageInfo);
            postParam.ne("del_flag", 1);
            postParam.orderByDesc("create_time");
            if (StringUtils.isNotBlank(ids)) {
                postParam.in("id", ids);
            }
            List<HfEnvResPersonTrainRecord> dataList = this.list(postParam);
            List<HfEnvResPersonTrainRecordExportVO> exportData = dataList.stream()
                    .map(item -> {
                        HfEnvResPersonTrainRecordExportVO hfEnvResPersonTrainRecordExportVO = new HfEnvResPersonTrainRecordExportVO();
                        BeanUtils.copyProperties(item, hfEnvResPersonTrainRecordExportVO);
                        Integer trainMode = item.getTrainMode();
//                        培训方式  1 线下  2 线上
                        if (Objects.equals(1, trainMode)) {
                            hfEnvResPersonTrainRecordExportVO.setTrainModeName("线下");
                        } else if (Objects.equals(2, trainMode)) {
                            hfEnvResPersonTrainRecordExportVO.setTrainModeName("线上");
                        }
                        return hfEnvResPersonTrainRecordExportVO;
                    }).collect(Collectors.toList());
            if (exportData != null && exportData.size() > 0) {
                ExcelTemplateUtil.exportExcel(busiResponse, exportData, HfEnvResPersonTrainRecordExportVO.class, "培训计划数据", "培训计划导出");
            } else {
                ExcelTemplateUtil.exportExcelTemplate(busiResponse, HfEnvResPersonTrainRecordExportVO.class, "培训计划数据", "培训计划导出");
            }
            return busiResponse;
        }

    }

    @Override
    public BusiResponse importExcel(MultipartFile file) throws Exception {
        if (file != null && !file.isEmpty()) {
            List<HfEnvResPersonTrainRecordImportVO> importExcel = ExcelImportUtils.importExcel(file.getInputStream(), HfEnvResPersonTrainRecordImportVO.class);
            if (importExcel != null && importExcel.size() > 0) {
                List<HfEnvResPersonTrainRecord> hfEnvResPersonTrainPlanList = importExcel.stream()
                        .map(item -> {
                            HfEnvResPersonTrainRecord hfEnvResPersonTrainRecord = new HfEnvResPersonTrainRecord();
                            BeanUtils.copyProperties(item, hfEnvResPersonTrainRecord);
                            String trainModeName = item.getTrainModeName();
                            if (Objects.equals("线下", trainModeName)) {
                                hfEnvResPersonTrainRecord.setTrainMode(1);
                            } else if (Objects.equals("线上", trainModeName)) {
                                hfEnvResPersonTrainRecord.setTrainMode(2);
                            }
                            return hfEnvResPersonTrainRecord;
                        }).collect(Collectors.toList());
                this.saveBatch(hfEnvResPersonTrainPlanList);
                return BusiResponse.ok("导入成功！");
            }
        }
        return BusiResponse.error("导入失败，原因未知！");
    }
}




